#include <iostream>
#include <unistd.h>
#include<cstring>
#include <sys/types.h>
#include <sys/wait.h>
int main()
{
    // 先创建匿名管道
    int filefd[2]; // 用来存储管道文件的读写端文件描述符
    pipe(filefd);
    pid_t id = fork(); // 创建子进程
    if (id < 0)
    {
        return 1;
    }
    else if (id == 0)
    {
        // 子进程
        // 子进程会继承父进程的文件描述符表，所以他们指向的是同一个管道资源
        close(filefd[0]); // 0是读，1是写
        while (true)
        {
            const char *ch = "hello cqy";
            write(filefd[1], ch, strlen(ch)); // 对管道写入数据
            sleep(1);
        }
        close(filefd[1]);
        exit(1);
    }
    else
    {
        // 父进程
        close(filefd[1]);
        while(true)
        {
            char buff[1024];
            int n = read(filefd[0],buff,sizeof(buff)-1);
            sleep(1);
            if(n<0)
            {
                std::cout<<"读取失败"<<std::endl;
                break;
            }
            else if(n>0)
            {
                buff[n]=0;
                std::cout<<"father:"<<buff<<std::endl;
            }
            else//n==0
            {
                break;
            }
        }
        close(filefd[0]);
        waitpid(id,nullptr,0);
    }
    return 0;
}
